﻿// ConsoleApplication4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//2.带值的定义
#define V 1

#include <iostream>
#include <string>
#include <codecvt>
#include <locale.h>
int main()
{

#define Hello
#ifdef Hello
	std::cout << "Hello?\n";
#else
	std::cout << "Or not!\n";
#endif

#undef Hello


#ifdef Hello
	std::cout << "Hello?\n";
#else
	std::cout << "Or not!\n";
#endif

//2.带值的条件编译
#if V == 1
	std::cout << "v=2?\n";
#endif

#if V == 2
	std::cout << "v=2?\n";
#endif

#if V < 2
	std::cout << "v<2?\n";
#endif 


//3.宏替换
#define STR "nihaoma?\n"
	std::cout << STR;

#define OUT std::cout
	OUT << STR;

#define BADIF if
	int a = 1;
	int b = 2;
	BADIF(a < 3)
	{

	}


//4.宏展开
#define OUTFunc(msg) printf(msg);
	OUTFunc(STR);


#define MAX(a, b) ((a) < (b) ? (b) : (a))


	int c = MAX(a, b);

	float fa = 1;
	float fb = 2;
	float fc = MAX(fa, fb);
//4.1 特殊宏替换,取字符串
#define LogRun(sth)  printf(#sth); sth;

	LogRun(printf("abc\n"));
	//4.2 特殊宏替换，拼合

#define CallF( a )  a##f
	CallF(print)("abc\n");

//宏展开与宏替换，可以把c++搞得面目全非
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
